/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package domain.controllers;

import domain.Entity.EntityGestor;
import domain.Entity.EntityTareaTrabajada;
import domain.Entity.EntityTrabajador;
import domain.Entity.EntityUsuario;
import domain.commands.RegistrarComando;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import managers.TareaManager;
import managers.UsuarioManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;

/**
 *
 * @author jorge
 */
public class loginController extends SimpleFormController {

    
    UsuarioManager um = UsuarioManager.getInstance();
    TareaManager tm = TareaManager.getInstance();
    
    public loginController() {
        setCommandClass(RegistrarComando.class);
  }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, org.springframework.validation.BindException errors) throws Exception {
       
        ModelAndView mav = new ModelAndView();
        HttpSession session = request.getSession(true);
        
        String gestor = null;
        RegistrarComando rc = (RegistrarComando) command;
        EntityUsuario eu = Login(rc.getNombre(),rc.getContrasena());
        Date hoy = new Date();
        
                if(eu!=null ){
                  
                  session.setAttribute( "nombre", eu.getNombre());
                  session.setAttribute( "contrasena", eu.getContrasena());
                  session.setAttribute("usuario",eu);
                 
        
                    if(eu.getTipo().equals("gestor")){
                       
                        gestor = "verdad";
                        EntityGestor eg= um.obetenerGestor(eu.getDni());
                        session.setAttribute("gestorUsuario", eg);
                        
                        int horasSemanal = 0;
                        int horasMesActual = 0;
                        int horasMesAnterior = 0;
                        int minutosSemanal = 0;
                        int minutosMesActual = 0;
                        int minutosMesAnterior = 0;
                        
                        List trabajos = new ArrayList();
                        List tareasTrabajadas = new ArrayList();
                        Iterator it= eg.getEtr().iterator();
                        Date fechaIniMesActual = new Date(hoy.getYear(),hoy.getMonth(),01);
                        Date fechaFinMesActual = new Date(hoy.getYear(),hoy.getMonth(),31);
                        Date fechaIniMesAnterior = new Date(hoy.getYear(),hoy.getMonth()-1,01);
                        Date fechaFinMesAnterior = new Date(hoy.getYear(),hoy.getMonth()-1,31);
                 
                        Date fechaIniSemana = new Date(hoy.getYear(),hoy.getMonth()-1,hoy.getDate() - hoy.getDay());
                        Date fechaFinSemana = new Date(hoy.getYear(),hoy.getMonth()-1,hoy.getDate());
                        
                        
                        while(it.hasNext()){
                            EntityTrabajador etr = (EntityTrabajador) it.next();
                            tareasTrabajadas = um.tareasTrabajadasFecha(etr, hoy);
                            trabajos.addAll(tareasTrabajadas);
                            List trabajoMensualActual = um.trabajorealizadoFechas(fechaIniMesActual, etr,fechaFinMesActual);
                            List trabajoMensualAnterior =um.trabajorealizadoFechas(fechaIniMesAnterior, etr, fechaFinMesAnterior);
                            List trabajoSemanal =um.trabajorealizadoFechas(fechaIniSemana, etr, fechaFinSemana);
                            
                            Iterator itma = trabajoMensualActual.iterator();
                            while(itma.hasNext()){
                                EntityTareaTrabajada ett = (EntityTareaTrabajada) itma.next();
                                horasMesActual = horasMesActual + ett.getTiempo().getHours();
                                minutosMesActual = minutosMesActual + ett.getTiempo().getMinutes();
                                if(minutosMesActual > 60){
                                    horasMesActual++;
                                    minutosMesActual = minutosMesActual -60;
                                }
                                
                            }
                            
                            Iterator itm = trabajoMensualAnterior.iterator();
                            while(itm.hasNext()){
                                EntityTareaTrabajada ett = (EntityTareaTrabajada) itm.next();
                                horasMesAnterior = horasMesAnterior + ett.getTiempo().getHours();
                                minutosMesAnterior = minutosMesAnterior + ett.getTiempo().getMinutes();
                                if(minutosMesAnterior > 60){
                                    horasMesAnterior++;
                                    minutosMesAnterior = minutosMesAnterior -60;
                                }
                                
                            }
                             
                            Iterator its = trabajoSemanal.iterator();
                            while(its.hasNext()){
                                EntityTareaTrabajada ett = (EntityTareaTrabajada) its.next();
                                horasSemanal = horasSemanal + ett.getTiempo().getHours();
                                minutosSemanal = minutosSemanal + ett.getTiempo().getMinutes();
                                if(minutosSemanal > 60){
                                    horasSemanal++;
                                    minutosSemanal = minutosSemanal -60;
                                }
                                
                            } 
                            
                        }
                        
                        int trabajoMensual = 100;
                        int trabajoSemanal = 100;
                        if(eg.getEtr().isEmpty()){
                        
                            trabajoMensual = eg.getEtr().size()* 8 * 22 ;
                            trabajoSemanal = eg.getEtr().size()* 8 * 5 ;
                        }
                        
                        horasMesActual = (100*horasMesActual)/trabajoMensual;
                        trabajoMensual = 100 -horasMesActual;
                        
                        horasMesAnterior = (100*horasMesAnterior)/trabajoMensual;
                        int trabajoMensualAnterior = 100 -horasMesAnterior;
                        
                        horasSemanal = (100*horasSemanal)/trabajoSemanal;
                        trabajoSemanal = 100 -horasSemanal;
                        
                        
                        
                        session.setAttribute("totalHMA", trabajoMensualAnterior);
                        session.setAttribute("totalHM", trabajoMensual);
                        session.setAttribute("totalhorasSemana", trabajoSemanal);
                        session.setAttribute("horasMesActual", horasMesActual);
                        session.setAttribute("horasMesAnterior", horasMesAnterior);
                        session.setAttribute("horasSemanal", horasSemanal);
                        
                        session.setAttribute("trabajosdehoy", trabajos);
                        session.setAttribute("gest", gestor);
                  
                       
                        
                        mav.setView(new RedirectView("principal.htm"));
                    
                    }else if(eu.getTipo().equals("trabajador")){
                         
                        session.setAttribute("gest", gestor);
                        EntityTrabajador etr= um.getTrabajador(eu.getDni());
                        session.setAttribute("trabajadorUsuario", etr);
                        List tareasTrabajadas = um.tareasTrabajadasFecha(etr, hoy);
                        
                        
                        int horasSemanal = 0;
                        int horasMesActual = 0;
                        int horasMesAnterior = 0;
                        int minutosSemanal = 0;
                        int minutosMesActual = 0;
                        int minutosMesAnterior = 0;
                        
                        Date fechaIniMesActual = new Date(hoy.getYear(),hoy.getMonth(),01);
                        Date fechaFinMesActual = new Date(hoy.getYear(),hoy.getMonth(),31);
                        Date fechaIniMesAnterior = new Date(hoy.getYear(),hoy.getMonth()-1,01);
                        Date fechaFinMesAnterior = new Date(hoy.getYear(),hoy.getMonth()-1,31);
                 
                        Date fechaIniSemana = new Date(hoy.getYear(),hoy.getMonth()-1,hoy.getDate() - hoy.getDay());
                        Date fechaFinSemana = new Date(hoy.getYear(),hoy.getMonth()-1,hoy.getDate());
                        
                        List trabajoMensualActual = um.trabajorealizadoFechas(fechaIniMesActual, etr,fechaFinMesActual);
                        List trabajoMensualAnterior =um.trabajorealizadoFechas(fechaIniMesAnterior, etr, fechaFinMesAnterior);
                        List trabajoSemanal =um.trabajorealizadoFechas(fechaIniSemana, etr, fechaFinSemana);
                            
                        Iterator itma = trabajoMensualActual.iterator();
                        while(itma.hasNext()){
                                EntityTareaTrabajada ett = (EntityTareaTrabajada) itma.next();
                                horasMesActual = horasMesActual + ett.getTiempo().getHours();
                                minutosMesActual = minutosMesActual + ett.getTiempo().getMinutes();
                                if(minutosMesActual > 60){
                                    horasMesActual++;
                                    minutosMesActual = minutosMesActual -60;
                                }
                                
                            }
                            
                            Iterator itm = trabajoMensualAnterior.iterator();
                            while(itm.hasNext()){
                                EntityTareaTrabajada ett = (EntityTareaTrabajada) itm.next();
                                horasMesAnterior = horasMesAnterior + ett.getTiempo().getHours();
                                minutosMesAnterior = minutosMesAnterior + ett.getTiempo().getMinutes();
                                if(minutosMesAnterior > 60){
                                    horasMesAnterior++;
                                    minutosMesAnterior = minutosMesAnterior -60;
                                }
                                
                            }
                             
                            Iterator its = trabajoSemanal.iterator();
                            while(its.hasNext()){
                                EntityTareaTrabajada ett = (EntityTareaTrabajada) its.next();
                                horasSemanal = horasSemanal + ett.getTiempo().getHours();
                                minutosSemanal = minutosSemanal + ett.getTiempo().getMinutes();
                                if(minutosSemanal > 60){
                                    horasSemanal++;
                                    minutosSemanal = minutosSemanal -60;
                                }
                            }   
                        
                            
                        horasMesActual = (100*horasMesActual)/(8*22);
                        int trabajoMensual = 100 -horasMesActual;
                        
                        horasMesAnterior = (100*horasMesAnterior)/(8*22);
                        int trabajoMensualAnt = 100 -horasMesAnterior;
                        
                        horasSemanal = (100*horasSemanal)/(8*22);
                        int trabajoSem = 100 -horasSemanal;
                        
                        
                        
                        session.setAttribute("totalHMA", trabajoMensualAnt);
                        session.setAttribute("totalHM", trabajoMensual);
                        session.setAttribute("totalhorasSemana", trabajoSem);
                        session.setAttribute("horasMesActual", horasMesActual);
                        session.setAttribute("horasMesAnterior", horasMesAnterior);
                        session.setAttribute("horasSemanal", horasSemanal);
                        
                        
                        
                        
                        session.setAttribute("trabajosdehoy", tareasTrabajadas);
                        mav.setView(new RedirectView("principal.htm"));
                    
                    
                    }
                    
                }else{
                    
                    session.invalidate();
                    mav.setView(new RedirectView("error.htm"));
                }
        return mav;
        
        }
     
     private EntityUsuario Login(String nombre, String contrasena){  
         
         EntityUsuario eu = um.get(nombre);
         boolean enc = false;
         
         if(eu.getNombre() !=null){
             
             if(eu.getContrasena().equals(contrasena)){
                 
                 enc = true;
                 
             }         
         
         
         }
         if(enc){
         return eu;
         
         }else{
         
         return null;
         }
     }
 
     

}
